import org.junit.jupiter.api.Test;

public class _02_两数相加 {

    @Test
    public void test(){

        ListNode l1=new ListNode(3);
        ListNode l2=new ListNode(4,l1);
        ListNode l3=new ListNode(2,l2);

        ListNode l4=new ListNode(4);
        ListNode l5=new ListNode(6,l4);
        ListNode l6=new ListNode(5,l5);

        System.out.println(addTwoNumbers(l3, l6));

    }
    @Test
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        //新建一个新的链表的头结点
        ListNode node=new ListNode(0);
        ListNode root=node;
        //设置进位变量temp，代表进位，要么是1，要么是0
        int temp=0;//temp不等于0的时候，此时l1和l2就算是最后一位了，新链表还是要在创建一个节点
        // 循环结束的条件是l1或者l2的节点为空
        while(l1!=null||l2!=null ||temp!=0 ){
            //获取两个链表当前节点的val
            int l1_val=l1!=null?l1.val:0;
            int l2_val=l2!=null?l2.val:0;
            //创建新链表的下一个节点,一开始是第一个节点,因为一开始的是头结点
            node.next=new ListNode((l1_val+l2_val+temp)%10);
            //移动节点
            node=node.next;
            temp=(l1_val+l2_val+temp)/10;
            //然后将l1和l2移向下一个节点
            if(l1!=null)l1=l1.next;
            if(l2!=null)l2=l2.next;
        }
        //返回新创链表的每一个节点
        return root.next;

    }

}
 class ListNode {
     int val;
     ListNode next;
     ListNode() {}
     ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 }
